package com.apolo;

import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.conexiones.WebService;
import com.recursos.Archivos;

import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;

public class Informacion extends Activity {

	private TextView lblAcerca;
	private LinearLayout lytProductos;
	private LinearLayout lytServicios;
	private WebService ws;
	private RotateAnimation animacion;
	private Archivos archivos;
	private InputStreamReader archivoEntrada;
	private OutputStreamWriter archivoSalida;
	private String [] informacion;
	private String ultimaActualizacion;
	private String acerca;
	private String [] productos;
	private String [] servicios;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.informacion);
		
		this.ws = new WebService();
		this.archivos = new Archivos();
		this.lblAcerca = (TextView) findViewById(R.id.lblAcerca);
		this.lytProductos = (LinearLayout) findViewById(R.id.lytProductos);
		this.lytServicios = (LinearLayout) findViewById(R.id.lytServicios);
		this.cargarInformacion();
	}

	public void ubicacion(View view){
		Intent intent = new Intent(this, Ubicacion.class);
		startActivity(intent);
		this.finish();
	}
	
	public void contacto(View view){
		Intent intent = new Intent(this, Contacto.class);
		startActivity(intent);
		this.finish();
	}
	
	public void cursos(View view){
		Intent intent = new Intent(this, Cursos.class);
		startActivity(intent);
		this.finish();
	}
	
	public void facebook(View view){
		Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/apolosoft?fref=ts"));
		startActivity(intent);
	}
	
	public void twitter(View view){
		Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/apolosoft"));
		startActivity(intent);
	}
	
	public void volverMenu(View view){
		this.finish();
	}
	
	private boolean hayInternet() {
		ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		if (cm.getActiveNetworkInfo() != null
				&& cm.getActiveNetworkInfo().isAvailable()
				&& cm.getActiveNetworkInfo().isConnected()) {
			return true;
		} else {
			return false;
		}
	}
	
	private void cargarInformacion(){
		try {
			this.archivoEntrada = new InputStreamReader(
					openFileInput("informacion.txt"));
			String texto = archivos.leer(archivoEntrada);
			if (texto != null && !texto.equals("")) {
				this.informacion = texto.split("%");
				this.ultimaActualizacion = this.informacion[0];
				this.acerca = this.informacion[1];
				this.productos = this.informacion[2].split("#");
				this.servicios = this.informacion[3].split("#");
			}
		} catch (FileNotFoundException e) {
			this.ultimaActualizacion = "0";
			this.acerca = "Apolo es una empresa Manizalena dedicada al desarrollo de software contable" +
					"para todo tipo de empresas, presta un gran soporte y es miembro de Manizales+ al cual vivelab" +
					"Manizales les esta haciendo unas aplicaciones, este es un texto de prueba";
			String [] produc = {"producto 1", "producto 2", "producto 3"};
			this.productos = produc;
			String [] serv = {"servicio 1", "servicio 2", "servicio 3"};
			this.servicios = serv;
		}
		
		this.mostrarInformacion();
	}
	
	public void mostrarInformacion(){
		this.lblAcerca.setText(this.acerca);
		this.lytProductos.removeAllViews();
		this.lytServicios.removeAllViews();
		for(int i=0; i<this.productos.length; i++){
			TextView tv = new TextView(this);
			if(!this.productos[i].equals("")){
				tv.setText(this.productos[i]);
				this.lytProductos.addView(tv);
			}
		}
		for(int i=0; i<this.servicios.length; i++){
			TextView tv = new TextView(this);
			if(!this.servicios[i].equals("")){
				tv.setText(this.servicios[i]);
				this.lytServicios.addView(tv);
			}
		}
	}
	
	public void actualizar(View view){
		if (hayInternet()) {
			ImageView iv = (ImageView) findViewById(R.id.btnActualizar);
			animacion = new RotateAnimation(0.0f, 360.0f , Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f);
			animacion.setInterpolator(new LinearInterpolator());
			animacion.setRepeatCount(Animation.INFINITE);
			animacion.setDuration(1000);
			iv.setAnimation(animacion);
			iv.startAnimation(animacion);
			try {
				this.archivoEntrada = new InputStreamReader(
						openFileInput("actualizaciones.txt"));
				String ultimaActualizacion = archivos.leer(archivoEntrada);
				if (ultimaActualizacion != null && !ultimaActualizacion.equals("")) {
					new Actualizar().execute(ultimaActualizacion);
				}
			} catch (FileNotFoundException e) {
				new Actualizar().execute("0");
			}
		}
		else{
			Toast.makeText(this, "No dispones de una conexión a internet.", Toast.LENGTH_LONG).show();
		}
	}
	
	private class Actualizar extends AsyncTask<String, Void, Void> {

		private final String EMPRESA_ID = "Apo-01";
		private Dialog dialog = new Dialog(Informacion.this);
		private JSONArray array;
		private String lstProductos = "";
		private String lstServicios = "";

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			dialog.setTitle("Actualizando...");
			dialog.setCancelable(false);
	        dialog.show();
		}

		@Override
		protected Void doInBackground(String... arg0) {
				String[] parametros = { "actualizaciones", EMPRESA_ID, arg0[0] };
				JSONArray respuesta = ws.conectar(parametros);
				try {
					JSONObject res = respuesta.getJSONObject(0);
					if(res.getInt("respuesta")>Integer.parseInt(ultimaActualizacion))
					{
						ultimaActualizacion = res.getString("respuesta");
						res = respuesta.getJSONObject(1);
						this.array = res.getJSONArray("acerca_de");
						res = array.getJSONObject(0);
						acerca = res.getString("about");
						res = respuesta.getJSONObject(2);
						this.array = res.getJSONArray("productos");
						for(int i=0; i<this.array.length(); i++){
							this.lstProductos = this.lstProductos + "#" + this.array.getJSONObject(i).getString("name");
						}
						res = respuesta.getJSONObject(3);
						this.array = res.getJSONArray("servicios");
						for(int i=0; i<this.array.length(); i++){
							this.lstServicios = this.lstServicios + "#" + this.array.getJSONObject(i).getString("name");
						}
						productos = this.lstProductos.split("#");
						servicios = this.lstServicios.split("#");
						
						String txtInformacion = ultimaActualizacion + "%" + acerca + "%" + 
								this.lstProductos + "%" + this.lstServicios;
						
						archivoSalida = new OutputStreamWriter(
								openFileOutput("informacion.txt",Activity.MODE_PRIVATE));
						archivos.guardar(archivoSalida, txtInformacion);
						
					}
				} 
				catch (JSONException e) {} 
				catch (FileNotFoundException e) {}
			return null;
		}

		@Override
		protected void onPostExecute(Void result) {
			super.onPostExecute(result);
			mostrarInformacion();
			animacion.cancel();
			dialog.dismiss();
		}
	}
}
